From: kfraser@localhost.localdomain Date: Tue, 31 Oct 2006 13:26:49 +0000 (+0000) Subject: [VMX] Replace vmx_load_cr2() with direct write to %cr2. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15567^2~167 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=779aa4f538f9b23d9b0ca0374460501e06cc2762;p=xen.git [VMX] Replace vmx_load_cr2() with direct write to %cr2. Signed-off-by: Keir Fraser --- diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index f617385c73..895612518d 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -2419,14 +2419,6 @@ asmlinkage void vmx_vmexit_handler(struct cpu_user_regs *regs) } } -asmlinkage void vmx_load_cr2(void) -{ - struct vcpu *v = current; - - local_irq_disable(); - asm volatile("mov %0,%%cr2": :"r" (v->arch.hvm_vmx.cpu_cr2)); -} - asmlinkage void vmx_trace_vmentry(void) { TRACE_5D(TRC_VMX_VMENTRY + current->vcpu_id, diff --git a/xen/arch/x86/hvm/vmx/x86_32/exits.S b/xen/arch/x86/hvm/vmx/x86_32/exits.S index d0ef963b86..144dd174d4 100644 --- a/xen/arch/x86/hvm/vmx/x86_32/exits.S +++ b/xen/arch/x86/hvm/vmx/x86_32/exits.S @@ -105,7 +105,8 @@ ENTRY(vmx_asm_do_vmentry) jnz vmx_process_softirqs call vmx_intr_assist - call vmx_load_cr2 + movl VCPU_vmx_cr2(%ebx),%eax + movl %eax,%cr2 call vmx_trace_vmentry cmpl $0,VCPU_vmx_launched(%ebx) diff --git a/xen/arch/x86/hvm/vmx/x86_64/exits.S b/xen/arch/x86/hvm/vmx/x86_64/exits.S index 275e8938b2..d427ac2cd5 100644 --- a/xen/arch/x86/hvm/vmx/x86_64/exits.S +++ b/xen/arch/x86/hvm/vmx/x86_64/exits.S @@ -115,7 +115,8 @@ ENTRY(vmx_asm_do_vmentry) jnz vmx_process_softirqs call vmx_intr_assist - call vmx_load_cr2 + movq VCPU_vmx_cr2(%rbx),%rax + movq %rax,%cr2 call vmx_trace_vmentry cmpl $0,VCPU_vmx_launched(%rbx) diff --git a/xen/arch/x86/x86_32/asm-offsets.c b/xen/arch/x86/x86_32/asm-offsets.c index 36197ef9e8..4153b9f967 100644 --- a/xen/arch/x86/x86_32/asm-offsets.c +++ b/xen/arch/x86/x86_32/asm-offsets.c @@ -86,6 +86,7 @@ void __dummy__(void) BLANK(); OFFSET(VCPU_vmx_launched, struct vcpu, arch.hvm_vmx.launched); + OFFSET(VCPU_vmx_cr2, struct vcpu, arch.hvm_vmx.cpu_cr2); BLANK(); OFFSET(VMCB_rax, struct vmcb_struct, rax); diff --git a/xen/arch/x86/x86_64/asm-offsets.c b/xen/arch/x86/x86_64/asm-offsets.c index 5e95815678..41f93fe9c5 100644 --- a/xen/arch/x86/x86_64/asm-offsets.c +++ b/xen/arch/x86/x86_64/asm-offsets.c @@ -80,6 +80,7 @@ void __dummy__(void) BLANK(); OFFSET(VCPU_vmx_launched, struct vcpu, arch.hvm_vmx.launched); + OFFSET(VCPU_vmx_cr2, struct vcpu, arch.hvm_vmx.cpu_cr2); BLANK(); OFFSET(VMCB_rax, struct vmcb_struct, rax);